import axios from 'axios'
import qs from 'qs'

// 创建axios的实例
const instance = axios.create({
  // 请求基路径
  baseURL: 'http://192.168.121.41:5000',
  // 请求超时时间
  timeout: 5000,
})
// 拦截器，对请求的响应做统一处理
// 请求拦截器，对前端二所有请求做统一处理，比如统一给所有请求添加请求头
instance.interceptors.request.use(
  (config) => {
    // 对所有请求做统一的处理（给鉴权添加鉴权字段）
    const token = JSON.parse(localStorage.getItem('tt')!)
    if (token) {
      config.headers.Authorization = token //秘钥
    }
    return config
  },
  (err) => {
    console.log(err)
  },
)
// 响应拦截器：对后端的所有响应做统一处理，比如异常处理
instance.interceptors.response.use(
  (response) => {
    // 在这里判断接口异常处理逻辑（birtoken失效后跳转到登录页）
    return response.data
  },
  (err) => {
    // 在这里判断接口网络异常处理逻辑（比如网络超时，网络错误）
    console.log(err)
  },
)

// 创建基于restful接口规范的异步请求方法
const get = async (url: string, params: unknown): Promise<unknown> => {
  return await instance.get(url, { params: params })
}
/**
 *post请求方法
 * @param url 请求地址，eg：/user/list
 * @param data 请求参数，eg:{account:'',password}
 * @returns
 */
const post = async (url: string, data: unknown): Promise<unknown> => {
  return await instance.post(url, qs.stringify(data))
}
// TODO put和del封装
/**
 * put请求方法
 * @param url 请求地址，eg：/user/list
 * @param data 请求参数，eg：{account:'',password}
 * @returns
 */
const put = async (url: string, data: unknown): Promise<unknown> => {
  return await instance.put(url, qs.stringify(data))
}
/**
 * del请求方法
 * @param url 请求地址，eg：/user/
 * @returns
 */
const del = async (url: string): Promise<unknown> => {
  return await instance.delete(url)
}

export default {
  get,
  post,
  put,
  del,
}
